iT邦幫忙

2025 iThome 鐵人賽

DAY 4
0
自我挑戰組

從 Python 基礎到 Vibe Coding 遊戲開發:我的奇幻旅程系列 第 7

第六天: While Loop (迴圈):依據條件無限循環

  • 分享至 

  • xImage
  •  

第六天: While Loop (迴圈):依據條件無限循環

嗨,各位程式碼冒險家!歡迎來到「我的 Python 遊戲開發之旅」第六天。昨天我們學習了 For Loop (迴圈),它讓程式碼能夠針對清單或字串中的每個項目進行重複操作,大幅提升了開發效率。今天,我們要探索另一種強大的迴圈類型:While Loop (迴圈)。與 For Loop 主要用於遍歷資料不同,While Loop 的執行機制是依據我們所設定的條件,只要條件成立,指令就會不斷重複執行,直到條件不再滿足為止。

什麼是 While Loop (迴圈)?

While Loop 的核心思想是「當…的時候,重複做…」。它會先判斷一個條件是否為真 (True),如果是,就執行迴圈內的程式碼;執行完畢後,再次檢查條件,如此反覆,直到條件為假 (False) 才停止。
最簡單的 While Loop 範例就是「無限迴圈」:

# 無限迴圈範例
# while True:
#     print("這是一個無限迴圈!")
#     # 程式會不斷輸出,直到手動中斷 (Ctrl+C)

當 while 後面的條件是 True 時,這個迴圈就會不斷重複執行,形成「無限迴圈」。這在某些情況下有用,但大多數時候我們需要設定一個中止條件來控制迴圈的執行。

控制迴圈的停止:條件與要避免無限迴圈,我們有兩種主要方法:

  1. 設定中止條件:在 while 關鍵字後明確指定一個會變動的條件,當條件不再滿足時,迴圈會自動停止。
    在上述例子中,number += 1 確保 number 會逐漸增加,最終使 number <= 5這個條件變為假,從而終止迴圈。
  2. 使用 break 語法:在迴圈內部,當某個特定情況發生時,可以使用 break 關鍵字立即中斷整個迴圈,即使 while 的條件仍然為真。
    這個例子展示了如何讓使用者透過輸入特定指令來停止一個原本會無限執行的迴圈。

遍歷清單

既然 While Loop 是基於條件,我們也可以用它來實現類似 For Loop 遍歷清單的功能。這通常需要搭配清單編號 (索引) 和 len() 函式來自動偵測清單長度。

# 使用 While Loop 遍歷清單
breakfast_menu = ["蛋餅", "三明治", "漢堡", "奶茶"]
index = 0 # 從清單的第一個項目 (編號 0) 開始
while index < len(breakfast_menu): # 條件:索引值小於清單長度 [3]
    print(breakfast_menu[index])
    index += 1 # 每執行一次,索引值加 1,移到下一個項目
# 輸出與 For Loop 相同:蛋餅, 三明治, 漢堡, 奶茶

這個範例說明了 While Loop 的彈性,即使是通常用 For Loop 處理的清單遍歷,也能透過條件控制和索引來實現。

綜合應用:「猜商品價格」遊戲

現在,讓我們將今天所學的 While Loop、以及先前學過的 input、If 條件判斷式和 abs() (絕對值) 函式整合起來,設計一個簡單的「猜商品價格」遊戲。這個遊戲會讓玩家持續猜測,直到猜中或達到最大嘗試次數為止。

target_price = 1000 # 正確商品價格 [3]
max_attempts = 5    # 最大猜測次數
attempts = 0        # 已嘗試次數
last_guess_diff = float('inf') # 初始化一個非常大的差值 [4]
closest_guess = -1 # 最接近的猜測值

print("歡迎來到猜商品價格遊戲!請猜一個 1 到 2000 之間的數字。")

while attempts < max_attempts: # 只要嘗試次數還沒達到上限,就繼續 [5]
    try:
        guess_str = input(f"第 {attempts + 1} 次嘗試,請輸入您的猜測金額:")
        guess = int(guess_str) # 將輸入的字串轉換為整數 [4]

        if guess == target_price:
            print("恭喜您!猜對了!商品價格就是 " + str(target_price) + " 元。")
            break # 猜對了就中斷迴圈 [4]
        else:
            attempts += 1
            diff = abs(target_price - guess) # 計算猜測與目標價格的絕對差值 [4]
            
            if diff < last_guess_diff:
                closest_guess = guess
                last_guess_diff = diff

            if guess < target_price:
                hint = "太低了!"
            else:
                hint = "太高了!"

            print(f"猜錯了!{hint} 您還有 {max_attempts - attempts} 次機會。")

    except ValueError:
        print("請輸入有效的數字!")
        
else: # 當 while 迴圈自然結束 (非被 break 中斷) 時執行
    print("\n遊戲結束!您已用完所有嘗試次數。")
    print(f"正確價格是 {target_price} 元。")
    if closest_guess != -1:
        print(f"您最接近的猜測是 {closest_guess} 元。")

這個遊戲示範了 While Loop 在互動式應用中的強大之處。它能夠根據玩家的輸入和設定的條件(例如猜測次數限制)來控制遊戲的流程,並透過 If 判斷和 abs() 函式提供即時反饋。

恭喜您!今天我們學習了 Python 的 While Loop,理解了它如何根據條件來控制程式碼的重複執行,以及如何運用 break 語法來控制迴圈的停止。更透過一個有趣的猜價遊戲,將所學的基礎語法融會貫通。這些都是遊戲開發中處理遊戲邏輯、實現互動功能的基石。明天,我們將介紹如何將程式碼打包成可重用的「函式」,讓您的專案結構更清晰,程式碼管理更有效率,敬請期待!


上一篇
第五天:For Loop (迴圈):讓程式碼自動重複執行
系列文
從 Python 基礎到 Vibe Coding 遊戲開發:我的奇幻旅程7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言